# 抖码算法，让算法学习变得简单有趣
# 作者：老汤


# 递归：代码复用
# 打印 nums[start...end]
def print_arr(nums, start):
    # 退出条件
    if start > len(nums) - 1:
        return
    # 第一步：打印 nums[start]
    print(nums[start])

    # 第二步：打印 nums[start + 1...end]
    print_arr(nums, start + 1)


# 迭代：显示栈模拟递归
# 空间复杂度：O(n)
def print_arr_iter(nums):
    # 定义显示栈，作用和系统栈是一样的
    stack = list()
    # 第一次调用 printArr
    stack.append(0)
    while len(stack) > 0:
        start = stack.pop()
        # 退出条件
        if start > len(nums) - 1:
            return
        # 第一步：打印第一个元素
        print(nums[start])
        # 第二步：打印 nums[start + 1...end]
        stack.append(start + 1)


nums = [1, 2, 3, 4]
print_arr(nums, 0)
print_arr_iter(nums)